<template>
  <div>
    <h3>这是老数组{{ oldArr }}</h3>
    <h3>第一种方法----这是新数组{{ newArr }}</h3>
    <h3>第二种方法----这是新数组{{ newArr1 }}</h3>
    <h3>第三种方法----这是新数组{{ newArr2 }}</h3>
    <h3>第四种方法----这是新数组{{ newArr3 }}</h3>
  </div>
</template>

<script>
//第一种高阶函数去重
function unique(arr) {
  return arr.reduce((acc,cur) =>{
    acc.includes(cur) || acc.push(cur)
    return acc
  },[])//别忘了最后这个参数啊！这叫做归并基础的初始值
}
// 第二种indexOf
function unique1(arr) {
  let hash = []
  // debugger
  for(var i = 0;i < arr.length;i++){
    if(hash.indexOf(arr[i]) == -1){
      hash.push(arr[i])
    }
  }
  return hash;
}
//第三种es6 set 实现去重
function unique2 (arr){
  let  x = new Set(arr);
  return [...x]
}
//第四种去重方式 排序后相邻去除法 
//给传入的数组排序，排序后相同的值会相邻，然后遍历排序后数组时，新数组只加入不与前一值重复的值。
function unique3 (arr){
  arr.sort();
  var hash=[arr[0]];
  for (var i = 1; i < arr.length; i++) {
     if(arr[i]!=hash[hash.length-1]){
      hash.push(arr[i]);
     }
  }
  return hash;
}
  export default {
    name:'unique',
    data() {
      return {
        oldArr: [1,2,3,4,2,3,4,5,6,1,2,3,4,5,6],
        newArr:[],
        newArr1:[],
        newArr2:[],
        newArr3:[]
      }
    },
    mounted () {
      this.getNewArr();
    },
    methods: {
      getNewArr () {
        this.newArr = unique(this.oldArr)
        this.newArr1 = unique1(this.oldArr)
        this.newArr2 = unique2(this.oldArr)
        this.newArr3 = unique3(this.oldArr)
      }
    },
  }
</script>

<style lang="scss" scoped>

</style>